namespace Admin2505.Domain.Entityes.App;
//角色

public class AppRole : EntityBase
{
public string RoleName  { get;set; }=null!;
    private readonly List<AppRolePermission> _permissions = new List<AppRolePermission>();
    public IReadOnlyCollection<AppRolePermission> Permissions => _permissions.AsReadOnly();



    // 构造函数
    public AppRole(string name)
    {
        if (string.IsNullOrWhiteSpace(name)) throw new ArgumentException("角色名称不能为空");
        RoleName = name;
    }
        // #pragma warning disable CS8618 // 在退出构造函数时，不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。
    protected AppRole() { }
// #pragma warning restore CS8618 // 在退出构造函数时，不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。
    // 添加权限（通过权限Id）
    public void GrantPermission(Apppermission permission)
    {
        if (_permissions.Any(rp => rp.PermissionId == permission.Id)) return;
        _permissions.Add(new AppRolePermission(this, permission));
    }

    // 移除权限（通过权限Id）
  //收回权限
    public void RevokePermission(Apppermission permission)
    {
        var rp = _permissions.FirstOrDefault(rp => rp.PermissionId == permission.Id);
        if (rp != null) _permissions.Remove(rp);
    }

    // 检查是否具有某个权限（通过权限Id）
    public bool HasPermission(Guid permissionId)
    {
        return _permissions.Any(rp => rp.PermissionId == permissionId);
    }

    internal bool HasPermission(string permissionName)
    {
        throw new NotImplementedException();
    }
}